PER.rover
Class OmniDriveAction

java.lang.Object
  extended byPER.rover.OmniDriveAction
All Implemented Interfaces:
Action, java.io.Serializable

public class OmniDriveAction
extends java.lang.Object
implements Action

Drives the trikebot a specified distance at a specified angle and speed. This action is different from the DriveToAction in that it uses Omnidirectional steering rather than Ackerman steering. The changes in speed are roughly, but not exactly, linear. Therefor, the rover will drive at the specified speed, but the distance covered will only be approximate and will vary slightly depending on the speed.

See Also:
Serialized Form

Field Summary
static byte CYCLE_SAFETY
          The safety level where it will cycle through multiple safety points
static byte NO_SAFETY
          The safety level where no checking is done
static byte STATIC_SAFETY
          The safety level where it will keep the head at pan=angle of travel, tilt=-35
 
Constructor Summary
OmniDriveAction(int dist, int ang, double speed, int v)
          Creates a new OmniDriveAction that does not take pictures and has safety turned off.
OmniDriveAction(int dist, int ang, double speed, int v, boolean takePics)
          Creates a new OmniDriveAction with saftey turned off.
OmniDriveAction(int dist, int ang, double speed, int v, byte safetyLevel, boolean takePics)
          Creates a new OmniDriveAction with the specified safety level.
 
Method Summary
 boolean doAction(Rover r)
          Tries to start the action.
 long getImageUpdateTime()
          Lets you know when the last image was taken.
 java.awt.image.BufferedImage getRecentImage()
          Gets the most recent image taken by this action.
 int getReturnValue()
          Returns SUCCESS if the rover drove the entire distance without detecting an obstacle or error.
 java.lang.String getShortSummary()
          Provides a shortened version of the summary returned by getSummary.
 java.lang.String getSummary()
          Provides a textual explanation of the Action, such as "turn 90 degrees"
 int getTime()
          Returns how long the action took to complete the last time it was executed, or how long the action is expected to take if it has never been executed.
 int getTimeRemaining()
          How much time until the action finishes (in milliseconds), if it has already started.
 boolean isCompleted()
          Whether the action has completed.
 boolean isSuccess()
          Returns true if the rover drove the entire distance without detecting an obstacle or error.
 void kill()
          Emergency stop - end the action immediately, if it's running.
 void setAngle(int ang)
          Sets the angle to the given degree (0=straight, 90=left, -90=right).
 void setDistance(int distance)
          Sets the distance to the given cm value and recalculates how long the action will take.
 void setSpeed(int s)
          Sets the speed to the given percent, where 0 is stopped and 1 is full speed.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NO_SAFETY

public static final byte NO_SAFETY
The safety level where no checking is done

See Also:
Constant Field Values

CYCLE_SAFETY

public static final byte CYCLE_SAFETY
The safety level where it will cycle through multiple safety points

See Also:
Constant Field Values

STATIC_SAFETY

public static final byte STATIC_SAFETY
The safety level where it will keep the head at pan=angle of travel, tilt=-35

See Also:
Constant Field Values
Constructor Detail

OmniDriveAction

public OmniDriveAction(int dist,
                       int ang,
                       double speed,
                       int v)
Creates a new OmniDriveAction that does not take pictures and has safety turned off.

Parameters:
dist - centimeters to move
ang - the angle to drive at. The minimum angle is -90 and the maximum angle is 90. Anything outside this range will be set to the closest valid value. (0=straight, 90=left, -90=right)
speed - the speed to drive at. Should be between 0 and 1, where 0 is stopped and 1 is full speed. Anything less than 0 will be treated as 0. Anything greater than 1 will be treated as 1.

OmniDriveAction

public OmniDriveAction(int dist,
                       int ang,
                       double speed,
                       int v,
                       boolean takePics)
Creates a new OmniDriveAction with saftey turned off. If the rover is taking pictures, use getRecentImage to get the pictures taken while the rover is driving.

Parameters:
dist - centimeters to move
ang - the angle to drive at. The minimum angle is -90 and the maximum angle is 90. Anything outside this range will be set to the closest valid value. (0=straight, 90=left, -90=right)
speed - the speed to drive at. Should be between 0 and 1, where 0 is stopped and 1 is full speed. Anything less than 0 will be treated as 0. Anything greater than 1 will be treated as 1.
takePics - if true, the rover will take pictures as it drives
See Also:
getRecentImage(), getImageUpdateTime()

OmniDriveAction

public OmniDriveAction(int dist,
                       int ang,
                       double speed,
                       int v,
                       byte safetyLevel,
                       boolean takePics)
Creates a new OmniDriveAction with the specified safety level. If the rover is taking pictures, use getRecentImage to get the pictures taken while the rover is driving.

Parameters:
dist - centimeters to move
ang - the angle to drive at. The minimum angle is -90 and the maximum angle is 90. Anything outside this range will be set to the closest valid value. (0=straight, 90=left, -90=right)
speed - the speed to drive at. Should be between 0 and 1, where 0 is stopped and 1 is full speed. Anything less than 0 will be treated as 0. Anything greater than 1 will be treated as 1.
safetyLevel - CYCLE_SAFETY, STATIC_SAFETY, or NO_SAFETY
takePics - if true, the rover will take pictures as it drives
See Also:
getRecentImage(), getImageUpdateTime()
Method Detail

setDistance

public void setDistance(int distance)
Sets the distance to the given cm value and recalculates how long the action will take.


setAngle

public void setAngle(int ang)
Sets the angle to the given degree (0=straight, 90=left, -90=right). The minimum angle is -90 and the maximum angle is 90. Anything outside of this range will be set to the nearest valid value.


setSpeed

public void setSpeed(int s)
Sets the speed to the given percent, where 0 is stopped and 1 is full speed. Anything outside of this range will be set to the nearest valid value. Also recalculates how long the action will take.


doAction

public boolean doAction(Rover r)
Description copied from interface: Action
Tries to start the action. Returns whether the action started.

Specified by:
doAction in interface Action

getTime

public int getTime()
Returns how long the action took to complete the last time it was executed, or how long the action is expected to take if it has never been executed.

Specified by:
getTime in interface Action

getSummary

public java.lang.String getSummary()
Description copied from interface: Action
Provides a textual explanation of the Action, such as "turn 90 degrees"

Specified by:
getSummary in interface Action

getShortSummary

public java.lang.String getShortSummary()
Description copied from interface: Action
Provides a shortened version of the summary returned by getSummary. For example, getSummary may return something like "Turn left and drive about 39 inches toward the red landmark," whereas getShortSummary might just return "Drive toward a landmark."

Specified by:
getShortSummary in interface Action

getReturnValue

public int getReturnValue()
Returns SUCCESS if the rover drove the entire distance without detecting an obstacle or error. Otherwise, returns the appropriate status code.

Specified by:
getReturnValue in interface Action
See Also:
RoverState

isSuccess

public boolean isSuccess()
Returns true if the rover drove the entire distance without detecting an obstacle or error. Undefined until isCompleted() returns true.

Specified by:
isSuccess in interface Action

getRecentImage

public java.awt.image.BufferedImage getRecentImage()
Gets the most recent image taken by this action. Image may be null if pictures are not being taken or the first picture has not yet been taken.

Returns:
the most recent picture taken by the action.

getImageUpdateTime

public long getImageUpdateTime()
Lets you know when the last image was taken. If pictures are not being taken or the first picture has not yet been taken, will return Long.MAX_VALUE.

Returns:
the system time in ms when the last image was taken

isCompleted

public boolean isCompleted()
Whether the action has completed. Undefined until doAction has been called.

Specified by:
isCompleted in interface Action

kill

public void kill()
Emergency stop - end the action immediately, if it's running.

Specified by:
kill in interface Action

getTimeRemaining

public int getTimeRemaining()
How much time until the action finishes (in milliseconds), if it has already started. Undefined behavior if the action has not yet begun, or has finished.

Specified by:
getTimeRemaining in interface Action